//g - tablica 2 wymairowa ["nazwa",ciezar]
//n - funkcja wykonywana co kazdy "takt"
//d - funkcja ktora wywoluje sie gdy siem udalo
//a  -funkcja ktora wywoluje sie gdy sie nie udalo
//h - co ile takt (obrot ze sprawdzneiem ile zaladowalo)
//q - po ilu poddac sie i wywolac a()

//Pr.status - aktualna ilosc zaladowanych KB
//Pr.all - calkowita ilosc KB do zaladowania


function prel(g,n,d,a,h,q){
//Obiekt
Pr={l:load,g:g,n:n,d:d,a:a,h:h,q:q,f:0,all:0,status:0}
// Funkcja zdejmujaca TimeOuta wywolywana albo OnSuccess albo OnFail i evalujaca odpowiednia funkcje ("u" to argument 1 - udalo sie,0 nie udalo sie)
function c(u){clearInterval(Pr.x);eval(u?Pr.d:Pr.a)}

function load(){
// t = true - potem dla kazdego elementu tablicy z obrazkami sprawdza czy zaladowalo, jak nie to t=false.
t=1;
// poczatkowy aktualny status
Pr.status=0;

// tutaj sprawdza kazdy element talbicy na okolicznosc zaladowania. taki wyglad tego ie?cos:cos jest bo NS6.1 nie zmienia complete po zaladowaniu :/

for(i=0;i<Pr.g.length&&(t&=(ie?Pr.w[i].complete:Pr.w[i].width>0));i++){
// updatuje status =]
with(Pr){status+=g[i][1]}
}
// wywoluje funkcje ktora ma sie wykonywac co takt (np. rysowanie paska).
eval(Pr.n);

// jesli t==true (wsio zaldowane) c(1) inaczej zwieksz index ladowania (obrotow) i jesli przekroczy czas jaki dales mu w "q" wywoluje c(0)
t?c(1):++Pr.f>Pr.q/Pr.h?c(0):"";}


Pr.s=0;
//tablica obrazkow
Pr.w=[];
// tworzy obrazek i daje mu src. oraz tworzy Pr.all
for(i=0;i<g.length;){Pr.w[i]=new Image();Pr.w[i].src=g[i][0];Pr.all+=g[i++][1]};
// wywoluje setInterval
Pr.x=setInterval('Pr.l()',h);
}